package Algorithm;

public class test3 {
    /* 快乐数: 对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
      然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
      如果这个过程 结果为 1，那么这个数就是快乐数 */
    // 算法原理: 快慢双指针
    public static int product(int n) {
        int sum = 0;
        while (n != 0) {
            int tmp = n % 10;
            sum += tmp * tmp;
            n /= 10;
        }
        return sum;
    }

    public static void main(String[] args) {
        // 类似于求环形链表的入口点
        int n = 19, slow = n, fast = product(n);
        while (slow != fast) {
            slow = product(slow);
            fast = product(product(fast));
        }
        System.out.println(slow == 1);
    }
}
